﻿/*******************************************************
 * 
 * 作者：胡庆访
 * 创建时间：20100326
 * 说明：用于适配命令的基模块类
 * 运行环境：.NET 3.5 SP1
 * 版本号：1.0.0
 * 
 * 历史记录：
 * 创建文件 胡庆访 20100326
 * 
*******************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Itenso.Windows.Input;
using OpenExpressApp.MetaAttribute;
using OpenExpressApp.WPF.Command;

namespace OpenExpressApp.WPF.SystemModule
{
    /// <summary>
    /// 用于适配命令的基模块类
    /// </summary>
    public abstract class AdaptCommandModule : LoadMetaDataModule
    {
        /// <summary>
        /// 把命令从ApplicationModel里适配到CommandRepository中
        /// 
        /// 把本程序集中，对于每一个标记了CommandAttribute的命令，
        /// 都构造CommandAdapter并加入到CommandRepository中。
        /// </summary>
        public override void Initialize()
        {
            base.Initialize();

            //适配每一个标记了CommandAttribute的类型
            foreach (var item in this.GetCommandTypes())
            {
                var attri = item.GetSingleAttribute<CommandAttribute>();

                //使用id作为命令名
                string commandName = attri.Id;
                if (CommandRepository.Contains(commandName) == false)
                {
                    var coreCommand = ApplicationModel.Commands[commandName];

                    var des = new CommandDescription(attri.Label ?? string.Empty, string.Empty, string.Empty, attri.ToolTip, string.Empty);
                    var adapter = new CommandAdapter(coreCommand, typeof(CommandRepository), des);

                    CommandRepository.Add(adapter);
                }
            }
        }
    }
}
